package cn.zch.soft.util.unicode;
import java.io.UnsupportedEncodingException;
public class UnicodeUtilFromNet1 {
	/**
	 * 中文转Unicode
	 */
	private static String unicodeencoding(String gbString) {
		//utfBytes = [测, 试]
		char[] utfBytes = gbString.toCharArray();
		StringBuilder unicodeBytes = new StringBuilder();
		for (char utfByte : utfBytes) {
			//转换为16进制整型字符串
			String hexB = Integer.toHexString(utfByte);
			if (hexB.length() <= 2) {
				hexB = "00" + hexB;
			}
			// unicodeBytes.append("\\u").append(hexB);
			unicodeBytes.append(hexB);
		}
		return unicodeBytes.toString();
	}
	/**
	 * Unicode转中文
	 */
	private static String decodeUnicode(String dataStr) {
		int start = 0;
		int end = 0;
		StringBuilder buffer = new StringBuilder();
		while (start > -1) {
			end = dataStr.indexOf("\\u", start + 2);
			String charStr = "";
			if (end == -1) {
				//charStr = dataStr.substring(start + 2, dataStr.length());
				charStr = dataStr.substring(start, dataStr.length());
			}
			else {
				// charStr = dataStr.substring(start + 2, end);
				charStr = dataStr.substring(start, end);
			}
			// 16进制parse整形字符串。
			char letter = (char) Integer.parseInt(charStr, 16);
			buffer.append(letter);
			start = end;
		}
		return buffer.toString();
	}
	/**
	 * Unicode转中文222
	 */
	private static String decodeUnicode2(String unicode) {
		/* 以 \ u 分割，因为java注释也能识别unicode，因此中间加了一个空格*/
		StringBuilder returnStr = new StringBuilder();
		// 由于unicode字符串以 \ u 开头，因此分割出的第一个字符是""。
		for (int i = 0; i < unicode.length(); i += 4) {
			returnStr.append((char) Integer.valueOf(unicode.substring(i, i + 4), 16).intValue());
		}
		return returnStr.toString();
	}
	/**
	 * gb2312解码
	 */
	private static String gb2312decode(String string) throws UnsupportedEncodingException {
		byte[] bytes = new byte[string.length() / 2];
		for (int i = 0; i < bytes.length; i++) {
			byte high = Byte.parseByte(string.substring(i * 2, i * 2 + 1), 16);
			byte low = Byte.parseByte(string.substring(i * 2 + 1, i * 2 + 2), 16);
			bytes[i] = (byte) (high << 4 | low);
		}
		return new String(bytes, "gb2312");
	}
	/**
	 * gb2312 编码
	 */
	private static String gb2312eecode(String string) throws UnsupportedEncodingException {
		StringBuilder gbkStr = new StringBuilder();
		byte[] gbkDecode = string.getBytes("gb2312");
		for (byte b : gbkDecode) {
			gbkStr.append(Integer.toHexString(b & 0xFF));
		}
		return gbkStr.toString();
	}
	public static void main(String[] args) {
		String hexGb2312 = "C1F5BDA8C5F4";
		String hexUnicode = "1852FA5E4F9E";
		String hexUnicode2 = "52185efa9e4f";
		String chi = "刘建鹏";
		try {
			String s1 = gb2312eecode(chi);
			System.out.println(s1);
			String s2 = gb2312decode(hexGb2312);
			System.out.println(s2);
			String s4 = unicodeencoding(chi);
			System.out.println(s4);
			String s3 = decodeUnicode2("52185efa9e4f");
			System.out.println(s3);
			String s5 = decodeUnicode("\\u5218\\u5efa\\u9e4f");
			System.out.println(s5);
		}
		catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
}
//
//	/**
//	 * 中文转Unicode
//	 * @param gbString
//	 * @return
//	 */
//	public static String UnicodeEncoding(String gbString) {   //gbString = "测试"
//		char[] utfBytes = gbString.toCharArray();   //utfBytes = [测, 试]
//		String unicodeBytes = "";
//		for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) {
//			String hexB = Integer.toHexString(utfBytes[byteIndex]);   //转换为16进制整型字符串
//			if (hexB.length() <= 2) {
//				hexB = "00" + hexB;
//			}
//			unicodeBytes = unicodeBytes + "\\u" + hexB;
//		}
//		return unicodeBytes;
//	}
//
//	/**
//	 * Unicode转中文
//	 */
//	public static String decodeUnicode( String dataStr) {
//		int start = 0;
//		int end = 0;
//		StringBuffer buffer = new StringBuffer();
//		while (start > -1) {
//			end = dataStr.indexOf("\\u", start + 2);
//			String charStr = "";
//			if (end == -1) {
//				charStr = dataStr.substring(start + 2, dataStr.length());
//			} else {
//				charStr = dataStr.substring(start + 2, end);
//			}
//			char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
//			buffer.append(new Character(letter).toString());
//			start = end;
//		}
//		return buffer.toString();
//
//	}
//
//
//	/**
//	 * gb2312编码
//	 */
//	public static String gb2312decode( String string) throws UnsupportedEncodingException{
//		byte[] bytes = new byte[string.length() / 2];
//		for(int i = 0; i < bytes.length; i ++){
//			byte high = Byte.parseByte(string.substring(i * 2, i * 2 + 1), 16);
//			byte low = Byte.parseByte(string.substring(i * 2 + 1, i * 2 + 2), 16);
//			bytes[i] = (byte) (high << 4 | low);
//		}
//		return new String(bytes, "gb2312");
//	}
//
//	/**
//	 * gb2312解码
//	 */
//	public static String gb2312eecode(String string) throws UnsupportedEncodingException{
//		StringBuffer gbkStr = new StringBuffer();
//		byte[] gbkDecode = string.getBytes("gb2312");
//		for (byte b : gbkDecode) {
//			gbkStr.append(Integer.toHexString(b & 0xFF));
//		}
//		return gbkStr.toString();
//	}